<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        function Student(name){
            this.name=name;
        }
        Student.prototype.say=function(){
            console.log("hello");
        };
        var stu=new Student("alice");
        console.log(stu.__proto__);
        console.log(Student.prototype);

        // js中最高原型指向于Object.prototype
        // js中一个数据的原型的连续的关系称之为原型链
        // stu--->Student.prototype--->Object.prototype--->null
        console.log(stu.__proto__===Student.prototype);//true
        console.log(Student.prototype.__proto__===Object.prototype);
        console.log(Object.prototype.__proto__);

       /*  ES6中明确规定__proto__是一个非标准属性
        ES6中提供标准的方法，用于代替__proto__所实现的功能
        Object.setPrototypeOf(对象,prototype)
        Object.getPrototypeOf(对象)
 */
        // stu.__proto__={
        //     type:"测试",
        //     test:function(){
        //         console.log("测试啊啊");
        //     } 
        // };


        // 下述代码等同于上述代码
        // 指定了stu的原型对象是{
        //     type:"测试",
        //     test:function(){
        //         console.log("测试啊啊");
        //     }
        Object.setPrototypeOf(stu,{
            type:"测试",
            test:function(){
                console.log("测试啊啊");
            }
        });
        console.log(stu);
        console.log(stu.__proto__);
        console.log(Object.getPrototypeOf(stu));

        // stu--->{type:"测试",test:...}--->Object.prototype--->null
    </script>
</head>
<body>
    
</body>
</html>